v3.6.16   Change handling of interrupts and vectors to more efficient form
          Remove version restrictions
          Various bug fixes
          Pointer optimisation completely rewritten
v3.6.15   Bug fix with nested pointers
          Remove excessive blank lines and unneccessary .FILE directives (cosmetic change)
v3.6.14   Move to inlining
v3.6.13.2 Bug in conditional optimisation fixed
v3.6.13.1 Improved register optimisation
v3.6.13.0 Fix issue where only references to a function or procedure are via '%.' substitution
v3.6.12.0 Exit cleanly on crash.
v3.6.11.0 Improve dead loop removal
v3.6.10.1 Fix issue with LAS, LAC and LAT
v3.6.10.0 Fix issue with constant referance to string (or other named object).
v3.6.9.1  Fix issue with loops within loops and intervening pointer operations
v3.6.9.0  Fix issues with 64 bit constants > 07FFFFFFFFFFFFFFFh
v3.6.8.2  Enhance special debug mode to make it less confusing
v3.6.8.1  Bug fix Rare issue with skip could casue problems
v3.6.8.0  Bug fix (could loop infinitely). Some small improvements to optimisation.
v3.6.7.2  Improvements to register detection
v3.6.7.0  Fix space saving analysis by function
v3.6.6.0  Bug fix - only does one iteration!
v3.6.5.0  Bug fix for memory offset calculations in some cases.
v3.6.4.0  Improve unexpected error handling; Fix bug in hand crafted assembler.
v3.6.3.0  Bug fix with Word handling
v3.6.2.0  Bug fix - skipped line problem
v3.6.1.0  Bug fix - incorrect optimisation of SBI/SBCI
v3.6.0.0  Reintroduce and extend Funstional Analysis system (.FAS files)
          Fix issue of jmp optimisation in bootloaders etc.
v3.5.12.0 Bug fix - incorrect operation of .OPTI NO_CHECK_RET_REGS
v3.5.11.0 Bug fix where a POP services two or more PUSHes and no JMP or call exists between first PUSH and POP pair
v3.5.10.1 Bug fix in special debug mode.
v3.5.10.0 Bug fix crash when '%.' used in assembly lines.
v3.5.9.0  Improved handling of flags
v3.5.8.4  Minor Bug fixes
v3.5.8.2  Bug fix - Check if frame value changes between successive loads
v3.5.8.1  Bug in evaluating when register address loaded into pointer register
v3.5.8.0  Minor speed improvement
          Bug fix when e.g. ROR follows LSR
v3.5.7.3  Bug fix for issue with SBIW and ADIW
v3.5.7.2  Bug fix for issue with SBC, ADC and SBCI.
v3.5.7.1  Allow invalid syntax of terminating ',' in hand crafted assembler, because
          native Assembler program allows it.
v3.5.7.0  Bug fix for interrupt optimisations wher asm has multiple RET or RETI statements.
v3.5.6.0  Speed improvement
v3.5.5.3  Bug fix for 'Tiny' processors with Interrupt optimisations
v3.5.5.2  Further general improvements, particularly to MOV and MOVW optimisations.
v3.5.5.1  Reversed a change which introduced an issue
v3.5.5.0  Improvements to unused register assignmments and MOV, MOVW optimisations
v3.5.4.2  Bug fix to MOV optimisation
v3.5.4.1  Bug fix for LDS/STS
v3.5.4.0  Improvements to interrupt register optimisation
v3.5.3.13 bug fix in LDS/STS optimisation
v3.5.3.12 Bug fix in boundry case for branch optimisation
v3.5.3.11 Bug fix to local variable optimisation
v3.5.3.10 Bug fix and improvements to complex conditional optimisations
v3.5.3.8,9 Bug with mul optimisation
v3.5.3.7  Bug - risk of error in register calculation when two pointers access the same location on stack
v3.5.3.6  Loop bug fix
v3.5.3.5  Support register variables in interrupts
v3.5.3.4  Bug Fix
v3.5.3.3  Speed improvement
          Local Var optimisation improvement
v3.5.3.2  Bug Fix.
          Speed Improvement
v3.5.3.1  Enhancement so that if EICALL, ICALL, EIJMP or IJMP are used in an interrupt
          routine, only those registers used somewhere in the program are saved/restored
v3.5.3.0  New Interrupt PUSH/POP autocorrection feature
          Turn off with {$OPTI NO_OPTI_INTERRUPT_REGS}
          Auto corrects register saving and restoring in interrupt routines, so
          any register needed will be saved/restored. Any saving of registers
          not needed is removed.
v3.5.2.1  Further Interrupt routine optimization
v3.5.2.0  Further Interrupt routine optimisation
v3.5.1.0  Bug Fix
v3.5.0.0  New feature is added for interrupt routines. If this is used the optimiser will
          save and restore all registers used in the routine, and, if necessary, remove associated
          SaveAllRegs and RestoreAllRegs calls.

          Although it can be used as an optimisation, its can
          also be used to save you the worry of working out which registers need to be saved and
          restored in an interrupt routine. When used this way it is a tool, not an optimisation.

v3.4.8.2  Bug Fix or LD/ST optimisation
v3.4.8.1  Improvement to Optimise Boolean
v3.4.8.0  Optimise Boolean
v3.4.7.0  Optimise some LD/ST lines with LDS/STS. Use {$OPTI NO_OPT_LDS_STS} to disable this optimisation
v3.4.6.0  Remove overoptimisation bug with certain forms of SetBit.
v3.4.5.0  Bug fix with SBCI and TST
v3.4.4.2  Bug fix to prevent potential infinite loop
v3.4.4.1  Bug fix for hand coded assembler statements that do not conform to AVRCo norms.
v3.4.4.0  Improvements to TST optimisation
v3.4.3.9  Further speed enhancement - now up to 5 times faster than v3.4.2.2 for full optimisation
v3.4.3.8  A number of speed enhancements to approximately double speed of optimisation.
v3.4.2.2  Bug fix to allow for use of _ACCA before definition
v3.4.2.0  Bug Fix in calculating address values.
v3.4.0.0  Bug fix for IN/OUT assembler lines.
v3.3.0.5  Recompiled in Delphi 2009 for speed.
v3.3.0.4  Bug fix in Opti_Quick. Normal optimisation was not affected
v3.3.0.3  Remove entries from unused variables warning file if function removed by optimiser.
v3.2.12.0 Bug Fix: Boundary problem with loops
v3.2.11.0 Bug Fix. Interpretted lines like
           BRNE xxx:
           as a label (because of the trailing :). Now checks if there is a space as well,
           since spaces are not allowed in labels.
v3.2.10.0 New flags added to second parameter on calling.
          -h  means hidden - normal screen does not show, and can also be added
              to the other possible parameters, so
          -sh means SmartLink with hidden screen and
          -qh means quick optimise with hidden screen
v3.2.9.0  Bug fix.
v3.2.8.0  Additional support for 'BREAK' instruction
v3.2.7.0  Another similar issue to v3.2.6.0
v3.2.6.0  Bug fix for bug introduced in recent update
v3.2.5.0  Bug fix to handle 64 bit constants in asm source
          Bug fix to remove potential overoptimising stack changes when FRAME is
          copied to another register.
          Enhanced optimisation (size and speed) for indirect use of frame variables
          New optimisation to remove redundant frame operations when using frame as
          local stack (disabled by {$OPTI NO_CHECK_REDUNDANT_FRAME_LOAD}
v3.2.4.0  Bug fix. If routine is called which uses indirect registers and incrementing
          it is not really possible to know whether a variable is needed or not.
          On rare occasions this could lead to overoptimisation.
v3.2.3.0  Two enhancements:
          If a call to a non-existant function is made an error is added to the error file and the optimisation is aborted.
          A new optimisation of loads of addresses, particularly of record members. This can be disabled by inserting
          {$OPTI NO_OPT_OFFSET_LOADS} anywhere in the source.
v3.2.2.8  Minor issue arising from prev changes
v3.2.2.7  Bug fix for local variable optimisation, which could fail in some circumstances
v3.2.2.5-6  Bug Fix for where CLR xxxx is followed by LDI xxxx, 0 and then by a branch statement.
          Similarly for SER xxxx and LDI xxxx, $FF and then by a branch statement
          Also removed weakness where a register points to a register
v3.2.2.1-4  Bug fixes for previous enhancements
v3.2.2.0  Some improvements to SIM support. Various minor improvements and bug fixes.
v3.2.1.20 ADIW accumulation bug fixed
v3.2.1.18 Small improvement e.g. in record manipulation
          Fixed bug when jumping from inside a .PHASE block to outside it.
v3.2.1.17 Bug fix
v3.2.1.15 A computationally very heavy optimisation that produces very little benefit has been removed.
v3.2.1.14 Bug Fix
v3.2.1.13 New file created for use with PED listing size improvements and removed functions
v3.2.1.12 Fix bug with {$OPTI_QUICK}
          Add extra parameter which may be -f or -s
          -f is eqivalent to putting {$OPTI_QUICK} in the source and is restricts optimisation to a single cycle
          -s is equivalent to putting {$OPTI SMARTLINK_ONLY} in the source. In this case the only optimistion is the removal of unused functions
v3.2.1.9-11  Bug Fix
v3.2.1.8  New feature added {$OPTI LIST_USER_FUNCTIONS} when lists user function sizes before and after optimisation.
v3.2.1.1-7  Bug Fixes
v3.2.1.0  Further Improvements in optimisation of local variables.
v3.2.0.0  Improvements with loops; improvements in MOVW optimisation.
v3.1.1.2  Bug Fix with LSR/ROR combinations where registers are not same
v3.1.1.2  Bug fix - some conditional tests could be wrongly removed.
v3.1.1.1  Bug Fix.
v3.1.1.0  Support for DEBUG_BREAK added. If a DEBUG_BREAK is detected the optimisation that delays the save of a register
	  is disabled so that the inspection of a location gives the expected value. This is aimed to aid debugging of a program when using an ICE.
          Normal optimisation is restored when the DEBUG_BREAK line is removed.
	  This can be disabled by adding the line {$OPTI IGNORE_BREAK} at any point in the program
	  A few other small improvements also.
v3.1.0.1  Improvements added for XMEGA
v3.1.0.0  XMEGA support added for
                LAS
                LAC
                LAT
                XCH
v3.0.16.0 Added support for binary numbers (e.g. ldi 10000b, 55h now works as ldi 16, 55h would have done)
v3.0.15.0 Bug fix. Volatility of DDRx was incorrect. (Was marked as non-volatile - should be volatile).
v3.0.14.1 Add $OPTI options to control volatility handling
          variable lists can be surrounded by {$OPTI VOLATILE_xxx} {$OPTI_VOLATILE_DFT} blocks
          to control variable volatility handling
          {$OPTI VOLATILE_ON} means following varibles are treated as volatile.
          {$OPTI VOLATILE_OFF} means following variable are treated as non-volatile
          {$OPTI VOLATILE_DFT} means following variables use default states
          If using these statements ALWAYS terminate with {$OPTI VOLATILE_DFT}.
          If you fail to do this a warning will be issued.
v3.0.14.0 Make external memory volatile to deal safely with memory mapped devices.
v3.0.13.1 Further bug fixes with large frames
v3.0.13.0 Bug fix with frame displacements > 255 bytes within loops.
v3.0.12.0 Improve optimiser to handle empty files and illegal MOV statements
          Bug Fix in loop optimisation
          Improve Loop Optimisation
v3.0.11.0 Bug Fix - loop optimisation for large frames
v3.0.10.0 Bug Fix - variation of v3.0.6.9
v3.0.9.2 2nd bug fix for loading addresses of registers (second case) - see also v 3.0.9.0.
v3.0.9.1 Bug fix - Evaluation of register usage in subroutines can on rare occasions be incorrect
v3.0.9.0 Bug fix for loading of addresses of registers
v3.0.8.0 Support added for new error files.
v3.0.7.0 Bug Fix. Unreachable JMP within loop can cause problems if prev JMP exits loop.
v3.0.6.15 Bug Fix where stack is popped from a different register (i.e. corresponding push is not a the stack register).
v3.0.6.14 In routines with jump to reboot (or other fixed label) OptimiseCSE could point to a line that is later removed as part of unused function
          Also improves optimisation slightly.
v3.0.6.12 Bug Fix COM following Skip lines incorrectly optimised
          Regain remaining optimisations removed by previous bug fix.
v3.0.6.11 Regain some of optimisations lost by previous bug fixes
v3.0.6.10 Bug Fix - Skip followed by assignment can cause over-optimisation
v3.0.6.9 Bug fix - occasional misidentification of redundant lines.
v3.0.6.8 Bug fix (of bug introduced by previous version)
v3.0.6.7 Bug fix - Branch optimisation bug
		 - CSE optimisation bug
v3.0.6.6 Bug fix - PUSH/POP issue in interrupt routines
v3.0.6.5 Bug Fix - large frames inside a loop.
v3.0.6.2 Bug fix where diverse paths can result in different usage of registers
v3.0.6.1 Simulator support extended to handle .DEB statements correctly.
v3.0.6.0 Tests have shown that allowing umlauts cases a 5-60 times slowing of optimisation
          so removed. Also removed code island removal as this produces very liitle
          gain but is expensive on resources.

v3.0.5.5 Bug fix - could generate improper LDD function with Z register.

v3.0.5.4 Bug fix - fix v3.0.4.5 (see below) did not cover all cases. This is an extension to this fix.

v3.0.5.3 Bug Fix. Conditional skip of load could be missed, so causing incorrect optimisation

v3.0.5.2 Fix issue with some drivers that save and restore registers but do not use the {$OPTI NO_CHECK_RETURN_REGS} flag
	 If there are any ASM lines in the routine an implied {$OPTI NO_CHECK_RETURN_FLAGS} is applied to the function.

v3.0.5.1 Bug fix - Jmp to tight loop caused optimiser to never complete.

v3.0.5.0 New directive {$OPTI SMARTLINK_ONLY} added that behaves similarly to the original linker option SMARTLINK.
	 WARNING - this optimisation is normally performed anyway. The effect of this directive is to DISABLE all other
	 optimisations!

v3.0.4.6 Resolve Locale issue where umlauts and similar are used in function names

v3.0.4.5 Bug Fix when two pointers point to same location.
